{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "from matplotlib import pyplot as plt\n",
    "from sklearn import datasets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "digits = datasets.load_digits()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1600x1200 with 8 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "images_and_labels = list(zip(digits.images, digits.target))\n",
    "plt.figure(figsize=(8, 6), dpi=200)\n",
    "\n",
    "for index, (image, label) in enumerate(images_and_labels[:8]):\n",
    "    plt.subplot(2, 4, index + 1)\n",
    "    plt.axis('off')\n",
    "    plt.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')\n",
    "    plt.title('Digit: %i' % label, fontsize=20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "shape of raw image data: (1797, 8, 8)\n"
     ]
    }
   ],
   "source": [
    "print(\"shape of raw image data: {0}\".format(digits.images.shape))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "shape of data: (1797, 64)\n"
     ]
    }
   ],
   "source": [
    "print(\"shape of data: {0}\".format(digits.data.shape))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "Xtrain, Xtest, Ytrain, Ytest = train_test_split(digits.data, digits.target, test_size=0.20, random_state=2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn import svm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "clf = svm.SVC(gamma=0.001, C=100.)\n",
    "clf.fit(Xtrain, Ytrain);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9777777777777777"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf.score(Xtest, Ytest)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "Ypred = clf.predict(Xtest)\n",
    "\n",
    "fig, axes = plt.subplots(4, 4, figsize=(8, 8))\n",
    "fig.subplots_adjust(hspace=0.1, wspace=0.1)\n",
    "\n",
    "for i, ax in enumerate(axes.flat):\n",
    "    ax.imshow(Xtest[i].reshape(8, 8), cmap=plt.cm.gray_r, interpolation='nearest')\n",
    "    ax.text(0.05, 0.05, str(Ypred[i]), fontsize=32, transform=ax.transAxes, color='green' if Ypred[i] == Ytest[i] else 'red')\n",
    "    ax.text(0.8, 0.05, str(Ytest[i]), fontsize=32, transform=ax.transAxes, color='black')\n",
    "    \n",
    "    ax.set_xticks([])\n",
    "    ax.set_yticks([])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\externals\\joblib\\__init__.py:15: DeprecationWarning: sklearn.externals.joblib is deprecated in 0.21 and will be removed in 0.23. Please import this functionality directly from joblib, which can be installed with: pip install joblib. If this warning is raised when loading pickled models, you may need to re-serialize those models with scikit-learn 0.21+.\n",
      "  warnings.warn(msg, category=DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "['digits_svm.pkl']"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.externals import joblib\n",
    "\n",
    "joblib.dump(clf, 'digits_svm.pkl')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "Expected 2D array, got 1D array instead:\narray=[4. 0. 9. 1. 4. 7. 1. 5. 1. 6. 6. 7. 6. 1. 5. 5. 4. 6. 2. 7. 4. 6. 4. 1.\n 5. 2. 9. 5. 4. 6. 5. 6. 3. 4. 0. 9. 9. 8. 4. 6. 8. 8. 5. 7. 9. 6. 9. 6.\n 1. 3. 0. 1. 9. 7. 3. 3. 1. 1. 8. 8. 9. 8. 5. 4. 4. 7. 3. 5. 8. 4. 3. 1.\n 3. 8. 7. 3. 3. 0. 8. 7. 2. 8. 5. 3. 8. 7. 6. 4. 6. 2. 2. 0. 1. 1. 5. 3.\n 5. 7. 6. 8. 2. 2. 6. 4. 6. 7. 3. 7. 3. 9. 4. 7. 0. 3. 5. 8. 5. 0. 3. 9.\n 2. 7. 3. 2. 0. 8. 1. 9. 2. 1. 9. 1. 0. 3. 4. 3. 0. 9. 3. 2. 2. 7. 3. 1.\n 6. 7. 2. 8. 3. 1. 1. 6. 4. 8. 2. 1. 8. 4. 1. 3. 1. 1. 9. 5. 4. 8. 7. 4.\n 8. 9. 5. 7. 6. 9. 0. 0. 4. 0. 0. 4. 0. 6. 5. 8. 8. 3. 7. 9. 2. 0. 3. 2.\n 7. 3. 0. 2. 1. 5. 2. 7. 0. 6. 9. 3. 1. 1. 3. 5. 2. 3. 5. 2. 1. 2. 9. 4.\n 6. 5. 5. 5. 9. 7. 1. 5. 9. 6. 3. 7. 1. 7. 5. 1. 7. 2. 7. 5. 5. 4. 8. 6.\n 6. 2. 8. 7. 3. 7. 8. 0. 9. 5. 7. 4. 3. 4. 1. 0. 3. 3. 5. 4. 1. 3. 1. 2.\n 5. 1. 4. 0. 3. 1. 5. 5. 7. 4. 0. 1. 0. 8. 5. 5. 5. 4. 0. 1. 8. 6. 2. 1.\n 1. 1. 7. 9. 6. 7. 9. 7. 0. 4. 9. 6. 9. 2. 7. 2. 1. 0. 8. 2. 8. 6. 5. 7.\n 8. 4. 5. 7. 8. 6. 5. 2. 6. 9. 3. 0. 0. 8. 0. 6. 6. 7. 1. 4. 5. 6. 9. 7.\n 2. 8. 5. 1. 2. 4. 1. 8. 8. 7. 6. 0. 8. 0. 6. 5. 5. 7. 8. 0. 4. 1. 4. 5.].\nReshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-27-ae20e0956c0a>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[0mclf\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mjoblib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mload\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'digits_svm.pkl'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      2\u001b[0m \u001b[0mYpred\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mclf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mXtest\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mclf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mscore\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mYtest\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mYpred\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;32mD:\\Anaconda3\\lib\\site-packages\\sklearn\\base.py\u001b[0m in \u001b[0;36mscore\u001b[1;34m(self, X, y, sample_weight)\u001b[0m\n\u001b[0;32m    355\u001b[0m         \"\"\"\n\u001b[0;32m    356\u001b[0m         \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[0mmetrics\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0maccuracy_score\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 357\u001b[1;33m         \u001b[1;32mreturn\u001b[0m \u001b[0maccuracy_score\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mX\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msample_weight\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0msample_weight\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    358\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    359\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\Anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py\u001b[0m in \u001b[0;36mpredict\u001b[1;34m(self, X)\u001b[0m\n\u001b[0;32m    572\u001b[0m             \u001b[0mClass\u001b[0m \u001b[0mlabels\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0msamples\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mX\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    573\u001b[0m         \"\"\"\n\u001b[1;32m--> 574\u001b[1;33m         \u001b[0my\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msuper\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mX\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    575\u001b[0m         \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mclasses_\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtake\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0masarray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mintp\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    576\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\Anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py\u001b[0m in \u001b[0;36mpredict\u001b[1;34m(self, X)\u001b[0m\n\u001b[0;32m    320\u001b[0m         \u001b[0my_pred\u001b[0m \u001b[1;33m:\u001b[0m \u001b[0marray\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mshape\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mn_samples\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    321\u001b[0m         \"\"\"\n\u001b[1;32m--> 322\u001b[1;33m         \u001b[0mX\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_validate_for_predict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mX\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    323\u001b[0m         \u001b[0mpredict\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_sparse_predict\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_sparse\u001b[0m \u001b[1;32melse\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_dense_predict\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    324\u001b[0m         \u001b[1;32mreturn\u001b[0m \u001b[0mpredict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mX\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\Anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py\u001b[0m in \u001b[0;36m_validate_for_predict\u001b[1;34m(self, X)\u001b[0m\n\u001b[0;32m    452\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    453\u001b[0m         X = check_array(X, accept_sparse='csr', dtype=np.float64, order=\"C\",\n\u001b[1;32m--> 454\u001b[1;33m                         accept_large_sparse=False)\n\u001b[0m\u001b[0;32m    455\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_sparse\u001b[0m \u001b[1;32mand\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0msp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0misspmatrix\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mX\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    456\u001b[0m             \u001b[0mX\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcsr_matrix\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mX\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\validation.py\u001b[0m in \u001b[0;36mcheck_array\u001b[1;34m(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)\u001b[0m\n\u001b[0;32m    519\u001b[0m                     \u001b[1;34m\"Reshape your data either using array.reshape(-1, 1) if \"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    520\u001b[0m                     \u001b[1;34m\"your data has a single feature or array.reshape(1, -1) \"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 521\u001b[1;33m                     \"if it contains a single sample.\".format(array))\n\u001b[0m\u001b[0;32m    522\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    523\u001b[0m         \u001b[1;31m# in the future np.flexible dtypes will be handled like object dtypes\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mValueError\u001b[0m: Expected 2D array, got 1D array instead:\narray=[4. 0. 9. 1. 4. 7. 1. 5. 1. 6. 6. 7. 6. 1. 5. 5. 4. 6. 2. 7. 4. 6. 4. 1.\n 5. 2. 9. 5. 4. 6. 5. 6. 3. 4. 0. 9. 9. 8. 4. 6. 8. 8. 5. 7. 9. 6. 9. 6.\n 1. 3. 0. 1. 9. 7. 3. 3. 1. 1. 8. 8. 9. 8. 5. 4. 4. 7. 3. 5. 8. 4. 3. 1.\n 3. 8. 7. 3. 3. 0. 8. 7. 2. 8. 5. 3. 8. 7. 6. 4. 6. 2. 2. 0. 1. 1. 5. 3.\n 5. 7. 6. 8. 2. 2. 6. 4. 6. 7. 3. 7. 3. 9. 4. 7. 0. 3. 5. 8. 5. 0. 3. 9.\n 2. 7. 3. 2. 0. 8. 1. 9. 2. 1. 9. 1. 0. 3. 4. 3. 0. 9. 3. 2. 2. 7. 3. 1.\n 6. 7. 2. 8. 3. 1. 1. 6. 4. 8. 2. 1. 8. 4. 1. 3. 1. 1. 9. 5. 4. 8. 7. 4.\n 8. 9. 5. 7. 6. 9. 0. 0. 4. 0. 0. 4. 0. 6. 5. 8. 8. 3. 7. 9. 2. 0. 3. 2.\n 7. 3. 0. 2. 1. 5. 2. 7. 0. 6. 9. 3. 1. 1. 3. 5. 2. 3. 5. 2. 1. 2. 9. 4.\n 6. 5. 5. 5. 9. 7. 1. 5. 9. 6. 3. 7. 1. 7. 5. 1. 7. 2. 7. 5. 5. 4. 8. 6.\n 6. 2. 8. 7. 3. 7. 8. 0. 9. 5. 7. 4. 3. 4. 1. 0. 3. 3. 5. 4. 1. 3. 1. 2.\n 5. 1. 4. 0. 3. 1. 5. 5. 7. 4. 0. 1. 0. 8. 5. 5. 5. 4. 0. 1. 8. 6. 2. 1.\n 1. 1. 7. 9. 6. 7. 9. 7. 0. 4. 9. 6. 9. 2. 7. 2. 1. 0. 8. 2. 8. 6. 5. 7.\n 8. 4. 5. 7. 8. 6. 5. 2. 6. 9. 3. 0. 0. 8. 0. 6. 6. 7. 1. 4. 5. 6. 9. 7.\n 2. 8. 5. 1. 2. 4. 1. 8. 8. 7. 6. 0. 8. 0. 6. 5. 5. 7. 8. 0. 4. 1. 4. 5.].\nReshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample."
     ]
    }
   ],
   "source": [
    "clf = joblib.load('digits_svm.pkl')\n",
    "Ypred = clf.predict(Xtest)\n",
    "clf.score(Ytest, Ypred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
